#ifndef _GRID_H_
#define _GRID_H_

#include"main.h"
#include"cell.h"

#define NO_SYMMETRY 0
#define QUARTER_SYMMETRY 1

#define START_MAIN_INFO 1
#define END_MAIN_INFO 2
#define START_CELL 3
#define END_CELL 4
#define END_FILE 5

class Grid {
 public:
	 Grid(void){};
  void NewGridFromTXTFile( char* filename, int speed_quantity, int FLAG_USE_SYMMETRY );
	void NewGridFromByteFile( char* f_name,  int speed_quantity );
  void MakeStep( void );
  void SetInitialConditions( double initial_T, ... );
	void SetInitialConditions( ... );
  Cell*** Cells;
  int size_x;
  int size_y;
  int FLAG_USE_SYMMETRY;
  int FLAG_use_ci;
};

extern Grid* Grid_;

class Symmetry {
 public:
   Symmetry( void ){};
  void ReflectGrid( void );
  void ReflectHalfGrid( void );
};

extern Symmetry* Symmetry_;

#endif